package org.ix.dynamicapis.service;

import org.ix.dynamicapis.model.PageList;
import org.ix.dynamicapis.model.request.ApiMultiConfigAddRequest;
import org.ix.dynamicapis.model.request.ApiMultiConfigPatchRequest;
import org.ix.dynamicapis.model.request.ApiMultiConfigQueryRequest;
import org.ix.dynamicapis.model.request.ApiMultiConfigSaveRequest;
import org.ix.dynamicapis.model.response.ApiMultiConfigDetailResponse;
import org.ix.dynamicapis.model.response.ApiMultiConfigListItemResponse;

import java.util.Collection;
import java.util.List;

/**
 * 多主键测试业务逻辑
 *
 * @author 郗世豪（rarexixi@gmail.com）
 */
public interface ApiMultiConfigService {

    /**
     * 添加多主键测试
     *
     * @param addRequest 多主键测试
     * @return 受影响的行数
     * @author 郗世豪（rarexixi@gmail.com）
     */
    ApiMultiConfigDetailResponse add(ApiMultiConfigAddRequest addRequest);

    /**
     * 批量添加多主键测试
     *
     * @param list 多主键测试列表
     * @return 受影响的行数
     * @author 郗世豪（rarexixi@gmail.com）
     */
    int batchAdd(Collection<ApiMultiConfigAddRequest> list);

    /**
     * 删除多主键测试
     *
     * @param patchRequest 更新条件请求
     * @return 受影响的行数
     * @author 郗世豪（rarexixi@gmail.com）
     */
    int delete(ApiMultiConfigPatchRequest patchRequest);

    /**
     * 根据ConfigKey, ConfigType更新多主键测试
     *
     * @param saveRequest 保存多主键测试请求实体
     * @param configKey ConfigKey
     * @param configType ConfigType
     * @return 更新后的多主键测试详情
     * @author 郗世豪（rarexixi@gmail.com）
     */
    ApiMultiConfigDetailResponse updateByConfigKeyAndConfigType(ApiMultiConfigSaveRequest saveRequest, String configKey, Integer configType);

    /**
     * 根据ConfigKey, ConfigType获取多主键测试详情
     *
     * @param configKey ConfigKey
     * @param configType ConfigType
     * @return 多主键测试详情
     * @author 郗世豪（rarexixi@gmail.com）
     */
    ApiMultiConfigDetailResponse getByConfigKeyAndConfigType(String configKey, Integer configType);

    /**
     * 获取多主键测试列表
     *
     * @param queryRequest 搜索条件
     * @return 符合条件的多主键测试列表
     */
    List<ApiMultiConfigListItemResponse> getList(ApiMultiConfigQueryRequest queryRequest);

    /**
     * 分页获取多主键测试列表
     *
     * @param queryRequest 搜索条件
     * @param pageNum      页码
     * @param pageSize     分页大小
     * @return 符合条件的多主键测试分页列表
     */
    PageList<ApiMultiConfigListItemResponse> getPageList(ApiMultiConfigQueryRequest queryRequest, Integer pageNum, Integer pageSize);
}
